           B.23. (Siluete). Figura determinat[ de o secven[ de coordonate numere
ntregi (x1,0),(x1,y1),(x2,y1),..(xk-1,yk-1),(xk,yk-1),(xk,0) astfel
nct x1<x2<..<xk, se numete poli-linie sau cladire (vezi figura). Consider[m o
colecie de n poli-linii (cl[diri) numerotate cu numerele 1,2,..,n. Cl[direa cu
num[rul i este n spatele cl[dirii cu num[rul j dac[ i<j; astfel, prima cl[dire
este n spatele tuturor cl[dirilor, iar cl[direa n este n faa tuturor. Cnd o cl[dire
i este n spatele cl[dirii j, partea comun[ a celor dou[ cl[diri care aparine primei
cl[diri nu este vizibil[. Poli-linia (sau poli-liniile) care m[rginete ntreaga colecie
de cl[diri este numit[ siluet[ a coleciei.
Problem[:
           Scriei un program care, pentru o colecie dat[ de poli-linii, realizeaz[
urm[toarele:
   - determin[ silueta coleciei;
   - afl[ numerele cl[dirilor vizibile (cl[direa este considerat[ vizibil[ dac[ o parte
a ei este vizibil[);
   - determin[ aria celei mai mari p[ri vizibile dintr-o cl[dire.



                                                                                        (x2,y2)(x3,y2)


                                                                                            (x2,y1)
                               (x1,y1)



                               (x1,0)                (x3,0)


                                                                                        Figura 2

Intrare: Datele de intrare sunt ntr-un fiier ASCII. Prima linie conine un singur
num[r ntreg n - num[rul cl[dirilor din colecie. Urm[toarele n linii conin
coordonatele primei, a doua,.., a n-a poli-linii. Dac[ o poli-linie este determinat[
de 2k puncte, linia ei va consta din numerele ntregi x1,y1,x2, y2,..,yk-1,xk
separate prin cte un spaiu.
Ieire: Ieirea va fi standard. Pe prima linie programul va scoate un singur num[r
ntreg m - num[rul de poli-linii diferite reprezentnd silueta cl[dirilor. Fiecare din
urm[toarele m linii conine coordonatele unei poli-linii din siluet[ (conform
formatului de intrare). Pe urm[toarea linie programul va scrie num[rul de cl[diri
vizibile (numere ntregi separate prin cte un spaiu). Ultima linie va avea un singur
num[r ntreg: suprafaa celei mai mari arii vizibile dintr-o cl[dire.
Exemple:
Intrare                                                                                         Ieire
3                                                                                                                           1
0 10 6 16 10                                         0 10 6 16 10 14 17
8 6 14                                                                1 3
7 14 17                                                                                         140

4                                                                                                                           2
5 10 9 6 15                                            5 10 9 6 13 12 16
13 12 16                                                                                     19 7 8 20 23
20 8 23                                                                                         1 2 3 4
19 7 21                                                                                         64
=========================================
                      BOI.23.
program Siluete; 
const
        max=100;
var
        n:integer;
        v:array[1..21] of record
                a,b:integer;
                h:array [-1..max+1] of record
                        low,high: integer;
                        end;
                end;
----------------------------------------------------
procedure traseaza(c,a,b,h:integer);
var
        i,j:integer;
begin
  for i:=a to b do begin
    v[c].h[i].high:=h; v[c].h[i].low:=0 end;
    if v[c].a>a then v[c].a:=a;
    if v[c].b<b then v[c].b:=b;
    for j:=1 to c-1 do
      for i:=a to b do
        if v[j].h[i].low<h then begin
           v[j].h[i].low:=h;
           if v[j].h[i].low>v[j].h[i].high then
              v[j].h[i].high:=v[j].h[i].low;
                                end;
end;
--------------------------------------------------
procedure calcul;
var
        i,j,k,kp,polilinii: integer;
        s:integer;
begin
  kp:=0; polilinii:=0; s:=0;
  for j:=0 to max do begin
     k:=0;
     for i:=n downto 1 do
       if v[i].h[j].high>k then k:=v[i].h[j].high;
    if (k<>0) and (s=0) then inc(polilinii);
    s:=k;
                    end;
 writeln(polilinii:5);
{*** calcul polilinii ***}
 s:=0;
 for j:=0 to max do begin
   k:=0;
   for i:=n downto 1 do
     if v[i].h[j].high>k then k:=v[i].h[j].high;
   if (k=0) and (s<>0) then writeln(j:5)
                       else
      if k<>s then write(j:5,k:5);
   s:=k;
                   end;
{*** Cladiri vizibile ***}
 for i:=1 to n do
    for j:=v[i].a to v[i].b do
      if v[i].h[j].high>v[i].h[j].low then begin
          write(i:5); break end;
 writeln;
{*** Arii ***}
 s:=0;
 for i:=1 to n do begin
   k:=0;
   for j:=v[i].a to v[i].b do
     if not( (v[i].h[j-1].low>=v[i].h[j].high) or
         (v[i].h[j-1].high<=v[i].h[j].low))
        then k:=k+v[i].h[j].high-v[i].h[j].low
        else begin
          if s<k then s:=k;
          k:=v[i].h[j].high-v[i].h[j].low;
             end;
   if s<k then s:=k;
                 end;
 writeln(s:5);
end;
------------------------------------------------
procedure init;
var
        i,j:integer;
begin
  for i:=1 to 21 do
    for j:=-1 to max+1 do begin
      v[i].h[j].low:=0; v[i].h[j].high:=0;
                          end;
end;
--------------------------------------------------------
procedure load;
var
        f:text;
        i,j,a,b:integer;
begin
  assign(f,'p7.in'); reset(f);
  while not eof (f) do begin
     init;
     readln(f,n);
     for i:=1 to n do begin
        read(f,j);
        v[i].a:=maxint; v[i].b:=-maxint-1;
        while not eoln(f) do begin
           read(f,a,b);
           traseaza(i,j,b-1,a);
           j:=b   end;
        readln(f);
                      end;
    calcul;
                 end;
  close(f);
end;
-------------------------------------------------
begin
   writeln;
   load;
end.
------------------------------------------
